package com.henry.utils;

/**
 * @author Liu Hanlin
 * @create 2025-02-23 20:39
 */
public class StringUtil {


    /**
     * 获取最后出现的指定字符串后面的内容
     * @param str 目标字符串
     * @param specifyStr 指定字符串
     * @return
     */
    public static String getContentAfterLastSpecifyStr(String str, String specifyStr) {
        if (isAnyEmpty(str, specifyStr)) {
            return "";
        }

        int lastSlashIndex = str.lastIndexOf(specifyStr);
        if (lastSlashIndex == -1) {
            return "";
        }

        return str.substring(lastSlashIndex + 1);
    }

    /**
     * 获取最后出现的指定字符串之前的内容
     * @param str 目标字符串
     * @param specifyStr 指定字符串
     * @return
     */
    public static String getContentBeforeLastSpecifyStr(String str, String specifyStr) {
        if (isAnyEmpty(str, specifyStr)) {
            return "";
        }

        int lastSlashIndex = str.lastIndexOf(specifyStr);
        if (lastSlashIndex == -1) {
            return str;
        }

        return str.substring(0, lastSlashIndex);
    }

    /**
     * 传入字符是否存在为null或空字符串
     * @param strings
     * @return
     */
    public static boolean isAnyEmpty(String... strings) {
        if (strings == null || strings.length == 0) {
            return true;
        }
        for (String str : strings) {
            if (str == null && !str.isEmpty()) {
                return true;
            }
        }
        return false;
    }


    /**
     * 判断字符串是否为null或空字符串
     * @param str 字符串
     * @return 如果字符串为空或null，返回true，否则返回false
     */
    public static boolean isEmpty(String str) {
        return str == null || str.trim().isEmpty();
    }

    /**
     * 判断字符串是否非空
     * @param str 字符串
     * @return 如果字符串非空，返回true，否则返回false
     */
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    /**
     * 去除字符串首尾空白字符
     * @param str 字符串
     * @return 去除首尾空白字符后的字符串
     */
    public static String trim(String str) {
        if (str == null) {
            return null;
        }
        return str.trim();
    }

    /**
     * 判断字符串是否包含某个子串（忽略大小写）
     * @param str 字符串
     * @param searchStr 要查找的子串
     * @return 如果包含子串，返回true，否则返回false
     */
    public static boolean containsIgnoreCase(String str, String searchStr) {
        if (str == null || searchStr == null) {
            return false;
        }
        return str.toLowerCase().contains(searchStr.toLowerCase());
    }

    /**
     * 字符串反转
     * @param str 字符串
     * @return 反转后的字符串
     */
    public static String reverse(String str) {
        if (str == null) {
            return null;
        }
        return new StringBuilder(str).reverse().toString();
    }

    /**
     * 将字符串首字母大写
     * @param str 字符串
     * @return 首字母大写后的字符串
     */
    public static String capitalizeFirstLetter(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }

    /**
     * 将字符串首字母小写
     * @param str 字符串
     * @return 首字母小写后的字符串
     */
    public static String decapitalizeFirstLetter(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        return str.substring(0, 1).toLowerCase() + str.substring(1);
    }

    /**
     * 判断两个字符串是否相等（忽略大小写）
     * @param str1 字符串1
     * @param str2 字符串2
     * @return 如果两个字符串相等（忽略大小写），返回true，否则返回false
     */
    public static boolean equalsIgnoreCase(String str1, String str2) {
        if (str1 == null || str2 == null) {
            return false;
        }
        return str1.equalsIgnoreCase(str2);
    }

    /**
     * 截取字符串
     * @param str 字符串
     * @param start 截取的起始位置
     * @param end 截取的结束位置
     * @return 截取后的字符串
     */
    public static String substring(String str, int start, int end) {
        if (str == null) {
            return null;
        }
        return str.substring(start, end);
    }

    /**
     * 检查字符串是否以某个前缀开头（忽略大小写）
     * @param str 字符串
     * @param prefix 前缀
     * @return 如果字符串以指定前缀开头，返回true，否则返回false
     */
    public static boolean startsWithIgnoreCase(String str, String prefix) {
        if (str == null || prefix == null) {
            return false;
        }
        return str.toLowerCase().startsWith(prefix.toLowerCase());
    }

    /**
     * 检查字符串是否以某个后缀结尾（忽略大小写）
     * @param str 字符串
     * @param suffix 后缀
     * @return 如果字符串以指定后缀结尾，返回true，否则返回false
     */
    public static boolean endsWithIgnoreCase(String str, String suffix) {
        if (str == null || suffix == null) {
            return false;
        }
        return str.toLowerCase().endsWith(suffix.toLowerCase());
    }

}
